function Game(){
    this.row = 20;
    this.col = 20;
    this.score = 0; // 得的分数
    this.init();
    this.snake = new Snake();   //实例化蛇
    this.start();
    this.bindEvent();
    this.food = new Food(this); //实例化食物
}

// 初始化一个表格
Game.prototype.init = function() {
    this.dom = document.createElement('table');
    var tr,td;
    for(var i = 0;i < this.row;i ++) {
        tr = document.createElement('tr');
        for (var j = 0;j < this.col;j ++) {
            td = document.createElement('td');
            tr.appendChild(td);
        }
        this.dom.appendChild(tr);
    }

    // 表格上树
    document.getElementById('dom').appendChild(this.dom)
}


// 清除屏幕
Game.prototype.clear = function() {
    for(var i = 0;i < this.row; i++) {
        for (var j = 0;j < this.col; j++) {
            this.dom.getElementsByTagName('tr')[i].getElementsByTagName('td')[j].style.background = 'transparent';
            this.dom.getElementsByTagName('tr')[i].getElementsByTagName('td')[j].innerHTML = '';
        }
    }
    // 当食物被蛇吃掉时 就清除被吃掉的食物实例
}

Game.prototype.setColor = function(row, col, color) {
    // 让表格的第几行，第几列设置什么颜色
    this.dom.getElementsByTagName("tr")[row].getElementsByTagName("td")[col].style.background = color
};

Game.prototype.setHtml = function(row, col, html) {
    this.dom.getElementsByTagName('tr')[row].getElementsByTagName('td')[col].innerHTML = html;
}

// 设置键盘事件监听
Game.prototype.bindEvent = function() {
    var self = this;
    document.onkeydown = function(e) {
        // console.log(game.snake);
        switch(e.keyCode) {
            case 39:
                // 判断此时蛇是否正在向左运动  如果是则不能改为向右运动
                if (self.snake.direction == 'L') return;
                self.snake.changeDirection("R");
                break;
            case 37:
                // 判断此时蛇是否正在向右运动  如果是则不能改为向左运动
                if (self.snake.direction == 'R') return;
                self.snake.changeDirection("L");
                break;
            case 38:
                // 判断此时蛇是否正在向上运动  如果是则不能改为向下运动
                if(self.snake.direction == 'D') return;
                self.snake.changeDirection("U");
                break;
            case 40:
                // 判断此时蛇是否正在向下运动  如果是则不能改为向上运动
                if (self.snake.direction == 'U') return;
                self.snake.changeDirection("D");
                break;
        }
    }
}

Game.prototype.start = function() {
    // 定时器的核心就是游戏的渲染本质，清屏-更新-渲染

    // 设置贞编号
    this.f = 0;
    this.timer = setInterval(function() {
        game.f++;
        document.getElementById('f').innerHTML = '帧编号' + game.f;

        // 渲染分数
        document.getElementById('score').innerHTML = '分数' + game.score;
        // 进行蛇的身体清屏
        game.clear();
        // 进行蛇的相关渲染
        game.snake.render();
        // 进行蛇的运动更新

        // 蛇的更新速度  根据蛇的身体长度进行蛇的速度的一个更新 蛇越长更新速度越快
        var during = game.snake.body.length < 30 ? 30 - game.snake.body.length : 1
        // 蛇的更新
        game.f % during == 0 && game.snake.update();
        // game.snake.update();
        // 进行食物的渲染
        game.food.render()

    },20)
}

